package com.example.springinitialization.utils.token;

import com.example.springinitialization.pojo.vo.User;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 用于操作已登录用户
 */
public class LoginUserUtils {
    /**
     * LOGIN_USER_THREAD_LOCAL 线程常量
     */
    private static final ThreadLocal<LoginUser> LOGIN_USER_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 获取登录用户信息
     *
     * @return
     */
    public static User getUser() {
        return LOGIN_USER_THREAD_LOCAL.get().getUser();
    }

    /**
     * 获取登录用户token
     *
     * @return
     */
    public static String getToken() {
        return LOGIN_USER_THREAD_LOCAL.get().getToken();
    }

    /**
     * 登录成功，传值
     */
    public static void setLoginUser(LoginUser loginUser) {
        LOGIN_USER_THREAD_LOCAL.set(loginUser);
        // 同时启动定时刷新缓存
        removeUserOnTime();
    }

    public static void removeUser() {
        LOGIN_USER_THREAD_LOCAL.remove();
    }

    /**
     * 删除缓存
     * Time 只执行一次
     */
    private static void removeUserOnTime() {
        // 创建 Timer 实例
        Timer timer = new Timer();

        // 创建 TimerTask 实例，用于定义定时任务的具体逻辑
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 在这里定义定时任务的逻辑
                removeUser();
            }
        };

        // 获取指定的时间戳,24小时后执行
        long timestamp = LOGIN_USER_THREAD_LOCAL.get().getCurrentTime() + 24 * 60 * 60 * 1000 * 1000L;

        // 使用 schedule 方法执行定时任务，在指定时间戳开始执行，且仅执行一次
        timer.schedule(task, new Date(timestamp));
    }
}
